package com.jyx.refactor.method;

/**
 * 
 * author 		jyx
 * email 		jyxsuper@163.com
 * description: ReplaceTempWithQuery
 * 				程序以一个临时变量保存某一表达式运算结果，将这个表达式提炼到一个独立函数中，
 * 				将这个临时变量的所有引用点替换为对新函数的调用。此后，新函数就可被其他函数调用
 * Company: 	myzczk
 * datetime: 	2017年9月22日 上午11:08:53
 */
public class ReplaceTempWithQuery {

	/** 数量 */
	private int _quantity;
	/** 项单价 */
	private int _itemPrice;

	/**
	 * REPLACE TEMP WITH QUERY
	 * 查询取代临时变量==>resource
	 */
	public double replaceTempWithQuery(){
		double basePrice = _quantity * _itemPrice;
		if(basePrice > 1000)
			return basePrice * 0.95;
		else
			return basePrice * 0.98;
	}
	
	/**
	 * REPLACE TEMP WITH QUERY
	 * 查询取代临时变量==>target
	 * @return
	 */
	public double replaceTempWithQueryTarget(){
		if(getBasePrice() > 1000)
			return getBasePrice() * 0.95;
		else
			return getBasePrice() * 0.98;
	}
	
	/**
	 * 命名：做什么
	 * 获取基础价位
	 * @return
	 */
	public double getBasePrice(){
		return _quantity * _itemPrice;
	}
	
}

/**
 * 内联临时变量
 * author 		jyx
 * email 		jyxsuper@163.com
 * description: InlineTemp
 * 				你有一个临时变量，只被一个简单表达式赋值一次，而它妨碍了其他重构手法
 * 				将所有对该变量的引用，替换为对它赋值的那个表达式自身。
 * Company: 	myzczk
 * datetime: 	2017年9月26日 上午9:47:45
 */
class InlineTemp{

	/** 数量 */
	private int _quantity;
	/** 项单价 */
	private int _itemPrice;
	
	/**
	 * INLINE TEMP 
	 * 内联临时变量=>source
	 * @return
	 */
	public boolean inlineTemp(){
		double basePrice = _quantity * _itemPrice;
		return basePrice > 1000;
	}
	
	/**
	 * INLINE TEMP 
	 * 内联临时变量=>target
	 * @return
	 */
	public boolean inlineTempTarget(){
		return _quantity * _itemPrice > 1000;
	}
}
